﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Control.conexion;

namespace Control.clases
{
    public class clsUsuario
    {
        private int idUsuario;
        private string usuarioNombre;
        private string usuarioPassword;
        private int usuarioTipo;

        public int IdUsuario
        {
            get
            {
               return this.idUsuario;
            }
            set
            {
            }
        }

        public string UsuarioNombre
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public string UsuarioPassword
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }

        public int UsuarioTipo
        {
            get
            {
                throw new System.NotImplementedException();
            }
            set
            {
            }
        }
    
        public int loginUsuario(string _usuarioNombre, string _passwordUsuario)
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();
            int isOK = 0;

            try
            {
                if (_usuarioNombre.Length == 0 && _passwordUsuario.Length == 0)
                {
                    isOK = 0; // con 0 no ingresa
                }
                else
                {
                    DbCommand cmd = oDataBase.CargarComandoSP("USP_S_LOGIN_TB_USUARIO");
                    oDataBase.AddParametro(cmd, "@usuario", _usuarioNombre);
                    oDataBase.AddParametro(cmd, "@password", _passwordUsuario);
                    dt = oDataBase.EjecutarConsulta(cmd);
                    if (dt != null)
                    {
                        if (dt.Rows[0]["usuario_tipo"].ToString() == "1")
                        {
                            isOK = 1;
                            this.idUsuario = int.Parse(dt.Rows[0]["id_usuario"].ToString());
                        }
                        else
                        {
                            isOK = 2;
                        }
                    }
                    else
                    {
                        isOK = 0;
                    }
                }

                return isOK;
            }
            catch (Exception ex)
            {
                //throw new System.Exception(ex.Message, ex.InnerException);
                return 0;
            }
        }

        public int crearUsuario(string _usuarioNombre, string _usuarioPassword, int _usuarioTipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_I_INSERTAR_TB_USUARIO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@usuario_nombre", _usuarioNombre);
                oDataBase.AddParametro(cmd, "@usuario_password", _usuarioPassword);
                oDataBase.AddParametro(cmd, "@usuario_tipo", _usuarioTipo);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public int actualizarUsuario(int _IdUsuario, string _usuarioNombre, string _usuarioPassword, int _usuarioTipo)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_U_ACTUALIZAR_TB_USUARIO"); // insertar SP_INSERTAR

                // Ingresar parametros
                oDataBase.AddParametro(cmd, "@id_usuario", _IdUsuario);
                oDataBase.AddParametro(cmd, "@usuario_nombre", _usuarioNombre);
                oDataBase.AddParametro(cmd, "@usuario_password", _usuarioPassword);
                oDataBase.AddParametro(cmd, "@usuario_tipo", _usuarioTipo);

                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

        public DataTable listarUsuario()
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_LISTAR_TB_USUARIO");
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public DataTable buscarUsuarioMantenimiento(int _IdUsuario)
        {
            clsConexion oDataBase = new clsConexion();
            DataTable dt = new DataTable();

            try
            {
                DbCommand cmd = oDataBase.CargarComandoSP("USP_S_BUSCAR_ID_TB_USUARIO");
                oDataBase.AddParametro(cmd, "@id_usuario", _IdUsuario);
                dt = oDataBase.EjecutarConsulta(cmd);
                if (dt != null)
                {
                    return dt;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception ex)
            {
                throw new System.Exception(ex.Message, ex.InnerException);
                return null;
            }
        }

        public int eliminarUsuario(int _IdUsuario)
        {
            try
            {
                clsConexion oDataBase = new clsConexion();
                int iReturn;
                DbCommand cmd = oDataBase.CargarComandoSP("USP_D_ELIMINAR_TB_USUARIO");
                oDataBase.AddParametro(cmd, "@id_usuario", _IdUsuario);
                iReturn = oDataBase.EjecutarTransaccion(cmd);
                return iReturn;
            }
            catch (Exception ex)
            {
                return -1;
                throw new System.Exception(ex.Message, ex.InnerException);
            }
        }

    }
}
